package com.moyu.user.domain.permission;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.http.HttpMethod;

import java.time.LocalDateTime;
import java.util.List;

/**
 * @Author 赵彦博
 * @Date 2024/11/19 10:58
 */
@Data
@ToString
@EqualsAndHashCode
@TableName("tb_permission")
public class Permission {

    /**
     * 主键ID
     */
    @JsonSerialize(using = ToStringSerializer.class)
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 权限名
     */
    private String name;

    /**
     * 类型
     */
    private Type type;

    /**
     * 权限类型
     */
    public enum Type {
        /**
         * 分类
         */
        category,
        /**
         * 菜单
         */
        menu,
        /**
         * 资源
         */
        resource
    }

    /**
     * 图标
     */
    private String icon;

    /**
     * 父级ID
     */
    private Integer parentId;

    /**
     * 资源路径
     */
    private String resourcePath;

    /**
     * 请求方法
     */
    private String requestMethod;

    /**
     * 路由名称
     */
    private String routerName;

    /**
     * 路由路径
     */
    private String routerPath;

    /**
     * 组件路径
     */
    private String componentPath;

    @TableField(fill = FieldFill.INSERT)
    private Long createBy;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.UPDATE)
    private Long updateBy;

    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;

    /**
     * 子集合
     */
    @TableField(typeHandler = JacksonTypeHandler.class, exist = false)
    private List<Permission> children;
}
